/**
 * @fn { node特点：异步I/O 非阻塞 }
 * @param {内置模块：可以直接使用的模块}
 * @param {fs path url http querystring} 
 * 
 * @param {
 *  1. 读文件
 *  2. 写文件
 *  3. 读文件夹
 *  4. 写文件夹（创建文件夹）
 *  5. 判断文件/文件夹是否存在 （回调参数特殊）
 *  6. 判断是文件还是文件夹 
 * 
 *  1. 追加内容
 *  2. 删除文件/文件夹
 * 
 * }
 *
*/

// const { fn, fn2 } = require('./doc/node_modules/makeDir');

const fs = require('fs');
// const mockData = require('./mock/data.json')
// console.log(mockData, 'mockData')

// console.log('fs: ', fs)
/* 读文件 */
/**
 * 第一个参数 路径：相对路径 绝对路径
 * ./day06/
 *
 * ../
 * 第二个参数：放置回调函数 接受结果 （err, data)
 *
 * 回调函数是解决异步问题的一种方案；
 *
 * 3. Buffer 数据
* @description
*/

// fs.readFile('./mock/data.json', (err, data) => {
//   // console.log(data.toString(), 'data')
//   // console.log(JSON.parse(data.toString()), 'data')
//   let res = JSON.parse(data.toString());
//   res.forEach(item => console.log(item.name))
//   // Buffer
// })

// 同步方法
// let data = fs.readFileSync('./mock/data.json')
// console.log(data, 'data')

/* 写文件 */
/**
 * 1. 写入的文件路径，如果文件存在，直接写入，如果文件不存在，自动创建并且写入
 * 2. 第二个参数： 放置要写入的数据
 *   通过字符串写入
 * 3. 接受写完的结果，如果是undefined ，说明写入成功了；
 */
// fs.writeFile('./mock/name.json',
//   JSON.stringify(['北京', ['上海'], { name: 'hello world' }]),
//   (err, data) => {
//     console.log(data, 'data')
//   })
// let res = fs.writeFileSync('./mock/name.json', JSON.stringify(['北京', ['上海'], { name: 'hello world' }]))
// console.log(res, 'res')

/**
 * 追加内容
*/
// for (let i = 0; i < 10; i++) {
//   fs.appendFile('./mock/name.doc', JSON.stringify(['北京', ['上海'], { name: 'hello world' }]), (err, data) => {
//     console.log(data, 'data')
//   })
// }

// fs.appendFileSync('./a.json', '*')

/* 删除文件 */
// fs.unlink('./mock/name.js', function (err, res) {
//   console.log(err)
// })
// fs.unlinkSync('./a.json')

/**
 * 创建一个文件夹
* @description
*/
// fs.mkdir('./src', (err, data) => {
//   console.log(data, 'data')
// })

// let data = fs.mkdirSync('./dist')
// console.log(data, 'data')

/* 删文件夹; 只能删除空文件夹 */
// fs.rmdir('./src', function (err, data) { })

/**
* @description读文件夹
*/
// 读文件夹 => 只读一级，只读自己的直接子元素  返回文件名组成的数组
// fs.readdir('./src', function (err, paths) {
//   console.log(paths, '我是第一行的代码')
// })

// let data = fs.readdirSync('./src')
// console.log(data, '我第二行的代码')

/**
 * @param {判断是文件还是文件夹}
 *
 */

// fs.stat('./src', (err, stat) => {
//   // console.log(stat, 'stat')
//   console.log(stat.size)
//   console.log(stat.isDirectory()) // 是否是文件夹
//   console.log(stat.isFile()) // 是否是文件
// })

// let dir = fs.statSync('./src')
// console.log(dir.isDirectory(), 'dir')
// console.log(dir.isFile(), 'dir')

// let stat = fs.statSync('./back')
// console.log(stat.isDirectory())
// console.log(stat.isFile())
// /* 判断文件夹 */
// fs.stat('./back', function (err, stat) {
//   // console.log(stat) // 文件或者文件夹信息
//   // console.log(stat.isFile()) // 判断是不是文件
//   // console.log(stat.isDirectory()) // 判断文件夹
// })


/* 判断文件是否存在; 文件和文件夹都支持
 回调函数的参数第一个就是结果
*/

// fs.exists('./src/s', (data) => {
//   console.log(data, 'data')
// })

// console.log(fs.existsSync('./doc/mock'))
